ASM=nasm
ASMFORMAT=-f elf
ASMOUTPUT=-o
CC=gcc
CCOUTPUT=-o
CCINPUT=-c
CFLAGS=-Wall -Wextra -Werror -nostdlib -nostartfiles -nodefaultlibs
LINKSCRIPT=linker.ld
LINKER=ld
LINKERUSESCRIPT=-T
LINKEROUTPUT=-o

all: kinit.o klib/ports.o klib/kprint.o kernel.o
	$(LINKER) $(LINKERUSESCRIPT) $(LINKSCRIPT) $(LINKEROUTPUT) kernel.bin $^

kinit.o: kinit.asm
	$(ASM) $(ASMFORMAT) $(ASMOUTPUT) $@ $^

klib/ports.o: klib/ports.c
	$(CC) $(CCOUTPUT) $@ $(CCINPUT) $^ $(CFLAGS)

klib/kprint.o: klib/kprint.c
	$(CC) $(CCOUTPUT) $@ $(CCINPUT) $^ $(CFLAGS)
	
lib/printf.o: lib/printf.c
	$(CC) $(CCOUTPUT) $@ $(CCINPUT) $^ $(CFLAGS)

kernel.o: kmain.c
	$(CC) $(CCOUTPUT) $@ $(CCINPUT) $^ $(CFLAGS)
	
qemu: all
	sudo qemu/mount.sh
	sudo cp kernel.bin qemu/rootDir/
	sudo qemu/umount.sh
	qemu qemu/geanOS.img
	
mercurial: all clean
	sudo qemu/mount.sh
	sudo cp kernel.bin qemu/rootDir/
	sudo qemu/umount.sh
	tar -cvzf qemu/geanOS.tar.gz qemu/geanOS.img
	hg ci
	hg push

clean:
	rm -f *.o
	rm -f klib/*.o

mrproper: clean
	rm -f kernel.bin
